Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

java-caller

Package Overview
Dependencies
Maintainers
1
Versions
41
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

java-caller

Library to easily call java from node sources. Automatically installs java if not present

  • 3.3.1
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
7.5K
decreased by-37.1%
Maintainers
1
Weekly downloads
 
Created
Source

Java Caller for Node.js

Version Downloads/week Downloads/total Generated by github-dependents-info CircleCI Mega-Linter codecov GitHub contributors GitHub stars License PRs Welcome

Lightweight cross-platform javascript module to easily call java commands from Node.js sources.

  • Automatically installs required Java version if not present on the system
  • Compliant with JDK & JRE from 8 to 20
  • Uses node spawn method to perform the call

There are two ways to use java-caller:

  • module: Manually call JavaCaller in your custom JS/TS code (example project)
  • CLI: Just define a java-caller-config.json and you can deliver your java executables as your own NPM packages ! (example project, which can be used as starter kit)

Installation

npm install java-caller --save

Usage

const JavaCaller = require('java-caller');
const java = new JavaCaller(JAVA_CALLER_OPTIONS);
const {status, stdout, stderr} = java.run(JAVA_ARGUMENTS,JAVA_CALLER_RUN_OPTIONS);

JAVA_CALLER_OPTIONS

ParameterDescriptionDefault valueExample
jarPath to executable jar file"myfolder/myjar.jar"
classPathIf jar parameter is not set, classpath to use
Use : as separator (it will be converted if runned on Windows), or use a string array.
. (current folder)"java/myJar.jar:java/myOtherJar.jar"
useAbsoluteClassPathsSet to true if classpaths should not be based on the rootPathfalsetrue
mainClassIf classPath set, main class to call"com.example.MyClass"
rootPathIf classPath elements are not relative to the current folder, you can define a root path.
You may use __dirname if you classes / jars are in your module folder
. (current folder)"/home/my/folder/containing/jars"
minimumJavaVersionMinimum java version to be used to call java command.
If the java version found on machine is lower, java-caller will try to install and use the appropriate one
811
maximumJavaVersionMaximum java version to be used to call java command.
If the java version found on machine is upper, java-caller will try to install and use the appropriate one
Can be equal to minimumJavaVersion
10
javaTypejre or jdk (if not defined and installation is required, jre will be installed)"jre"
additionalJavaArgsAdditional parameters for JVM that will be added in every JavaCaller instance runs["-Xms256m","-Xmx2048m"]
javaExecutableYou can force to use a defined java executable, instead of letting java-caller find/install one. Can also be defined with env var JAVA_CALLER_JAVA_EXECUTABLE"/home/some-java-version/bin/java.exe"

JAVA_ARGUMENTS

The list of arguments can contain both arguments types together:

  • Java arguments (-X*, -D*). ex: "-Xms256m", "-Xmx2048m"
  • Main class arguments (sent to public static void main method). ex: "--someflag" , "--someflagwithvalue myVal" , "-c"

Example: ["-Xms256m", "--someflagwithvalue myVal", "-c"]

JAVA_CALLER_RUN_OPTIONS

ParameterDescriptionDefaultExample
detachedIf set to true, node will node wait for the java command to be completed.
In that case, childJavaProcess property will be returned, but stdout and stderr may be empty, except if an error is triggered at command execution
falsetrue
stdoutEncodingAdds control on spawn process stdoututf8ucs2
waitForErrorMsIf detached is true, number of milliseconds to wait to detect an error before exiting JavaCaller run5002000
cwdYou can override cwd of spawn called by JavaCaller runnerprocess.cwd()some/other/cwd/folder
javaArgsList of arguments for JVM only, not the JAR or the class[]['--add-opens=java.base/java.lang=ALL-UNNAMED']
windowsVerbatimArgumentsNo quoting or escaping of arguments is done on Windows. Ignored on Unix. This is set to true automatically when shell is specified and is CMD.truefalse
windowlessIf windowless is true, JavaCaller calls javaw instead of java to not create any windows, useful when using detached on Windows. Ignored on Unix.falsetrue

Examples

Call a class located in classpath

const java = new JavaCaller({
    classPath: 'test/java/dist',
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr } = await java.run();

Call a class with multiple folders in the classPath

const java = new JavaCaller({
    classPath: ['C:\\pathA\\test\\java\\dist', 'C:\\pathB\\test\\java\\dist'],
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr } = await java.run();

Call a class located in classpath with java and custom arguments

const java = new JavaCaller({
    classPath: 'test/java/dist',
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr } = await java.run(['-Xms256m', '-Xmx2048m', '--customarg nico']);

Call a class in jar located in classpath

const java = new JavaCaller({
    classPath: 'test/java/jar/JavaCallerTester.jar',
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr } = await java.run();

Call a runnable jar

const java = new JavaCaller({
    jar: 'test/java/jar/JavaCallerTesterRunnable.jar',
});
const { status, stdout, stderr } = await java.run();

Call a detached java process

const java = new JavaCaller({
    classPath: 'test/java/dist',
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr, childJavaProcess } = await java.run(['--sleep'], { detached: true });

// Kill later the java process if necessary
childJavaProcess.kill('SIGINT');

Call a windowless java process

const java = new JavaCaller({
    classPath: 'test/java/dist',
    mainClass: 'com.nvuillam.javacaller.JavaCallerTester'
});
const { status, stdout, stderr } = await java.run(['--sleep'], { windowless: true });

You can see more examples in test methods

TROUBLESHOOTING

Set environment variable DEBUG=java-caller before calling your code using java-caller module, and you will see the java commands executed.

Example debug log:

java-caller Found Java version 1.80131 +1s
java-caller Java command: java -Xms256m -Xmx2048m -cp C:\Work\gitPerso\node-java-caller\test\java\dist com.nvuillam.javacaller.JavaCallerTester -customarg nico +1ms

CONTRIBUTE

Contributions are very welcome !

Please follow Contribution instructions

RELEASE NOTES

See complete CHANGELOG

Keywords

FAQs

Package last updated on 28 Apr 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc